Advances in semi-conductor processing and logic design have permitted an increase in the amount of logic that may be present on integrated circuit devices and in computer systems. However, as systems have become larger and more complex, the time to initialize the system, i.e. a time to boot a system, has drastically increased. Often a competitive feature of a platform, from a user's perspective, is the time from power-on or reset to a usable Operating System prompt.
Currently, legacy Basic Input/Output Software (BIOS) performs device initialization upon boot in a serial fashion. For example, when initializing a USB device and an IDE device, the USB root hub, a USB bus, a USB switch, the USB device, the IDE root hub, the IDE bus, and the IDE device are processed or initialized serially. Note that these individual devices or nodes may previously been interleaved during initialization, but not overlapping, i.e. not in parallel or in a non-blocking manner. Even with the advent of more robust initialization environments, such as Extensible Firmware Interface (EFI) environments, these devices are still processed in a blocking fashion.
Furthermore, within an EFI environment, path abstractions representing paths to hardware devices or file locations are often not created until a later initialization phase of the boot sequence, such as a Driver Execution Environment (DXE) phase. As a result, building paths and processing devices in a serial fashion in later phases of a boot sequence potentially results in inefficient platform initialization. This potentially increases the amount of time from power-on or reset to a usable OS prompt for the user.